#pragma once
#include "HashTable.hpp"

namespace bit
{
    template<class K,class V>
    class unordered_map
    {
        typedef HashNode<pair<K,V>> Node;
        class cm
        {
        public:
            K operator()(pair<K,V> data)
            {
                return data.first;
            }
        };
    public:
        typedef typename hashtable<K,pair<K,V>,cm>::iterator iterator;
        iterator begin()
        {
            return _ht.begin();
        }

        iterator end()
        {
            return _ht.end();
        }
        bool insert(const pair<K,V>& data)
        {
            return _ht.insert(data);
        }

        void print()
        {
            _ht.print();
        }

        iterator find(const K& val)
        {
            return _ht.find(pair<K,V>(val,val));
        }

        bool erase(const K& val)
        {
            return _ht.erase(pair<K,V>(val,val));
        }

    private:
        hashtable<K,pair<K,V>,cm> _ht;
    };

}
